package com.skivingcloud.camunda.service;

import com.skivingcloud.admin.sys.entity.User;
import com.skivingcloud.common.utils.PageUtils;
import org.camunda.bpm.engine.repository.ProcessDefinition;
import org.camunda.bpm.model.bpmn.BpmnModelInstance;
import org.camunda.bpm.model.bpmn.instance.StartEvent;
import org.camunda.bpm.model.xml.Model;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.List;
import java.util.Map;

/**
 * 流程模型设计
 * @author hushouquan
 *
 */
public interface ModelService{
    
    /**
     * 分页查询模型
     * @param params 参数
     * @param user 用户
     * @return 模型列表
     */
    PageUtils list(Map<String, Object> params, User user);
    
    /**
     * 根据id加载模型数据
     *
     * @param processDefinitionId 模型id
     * @return 模型内容
     */
    BpmnModelInstance getEditorJson(String processDefinitionId) throws Exception;
    
    /**
     * 获取最新版的流程定义
     * @return 流程定义
     */
    List<ProcessDefinition> getProcessOption();
    
    /**
     * 发布模型
     * @param id 模型id
     * @param user 用户
     * @throws Exception
     */
    void deploy(String id, User user) throws Exception;
    
    /**
     * 加载流程文件内容
     * @param deploymentId
     * @param resType
     * @param processDefinition
     * @return
     */
    InputStream resourceRead(String deploymentId, String resType, ProcessDefinition processDefinition);
    
    /**
     * 流程导入
     * @param files
     * @param user
     * @throws Exception
     */
    void improtDeploy(List<MultipartFile> files, User user) throws Exception;
    
    /**
     * 将流程转化为模型
     * @param procDefId
     * @return
     * @throws Exception
     */
    Model convertToModel(String procDefId) throws Exception;
    
    /**
     * 获取开始节点信息用于组织页面表单
     * @param defKey
     * @return
     */
    StartEvent getModelStartNodeInfo(String defKey);
}
